%     FASTENER DOCTOR - программа для лечения и конвертации крепежа
%     Copyright (C) 2018  Михаил Козлов
%     Сайт проекта: <http://www.fastenerdoctor.ru/>
%     Адрес электронной почты для связи с разработчиком:
%     <doctor.fastener@gmail.com>
% 
%     Эта программа является свободным программным обеспечением: Вы можете
%     распространять ее и/или изменять, соблюдая условия Универсальной общественной
%     лицензии GNU, опубликованной Фондом свободного программного обеспечения,
%     либо редакции 3, либо (на Ваше усмотрение) любой редакции, выпущенной позже.
% 
%     Эта программа распространяется в надежде на то, что она окажется полезной,
%     но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, включая даже подразумеваемую гарантию ТОВАРНОЙ ПРИГОДНОСТИ,
%     либо ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ. Ознакомьтесь с Универсальной общественной
%     лицензией GNU для получения более подробной информации.
% 
%     Вы должны были получить копию Универсальной общественной лицензии GNU
%     вместе с этой программой. Если Вы ее не получили, то перейдите по адресу:
%     <http://www.gnu.org/licenses/>.
% 
%     This program is free software: you can redistribute it and/or modify
%     it under the terms of the GNU General Public License as published by
%     the Free Software Foundation, either version 3 of the License, or
%     (at your option) any later version.
% 
%     This program is distributed in the hope that it will be useful,
%     but WITHOUT ANY WARRANTY; without even the implied warranty of
%     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
%     GNU General Public License for more details.
% 
%     You should have received a copy of the GNU General Public License
%     along with this program.  If not, see <https://www.gnu.org/licenses/>.

function Check_Elements(ELEMENTS, PSETS, COORD)

% ELEMENTS (карточки CTETRA, CPENTA, CHEXA) | .card | .ID | .Prop_ID | .N_nodes | .Nodes(N_nodes,1) |
% ELEMENTS (карточка CQUAD4) | .card | .ID | .Prop_ID | .G(4,1) | .THETA_MCID | .ZOFFS | .TFLAG | .T1 | .T2 | .T3 | .T4 | .Ori_type (CID | Angle) |
% ELEMENTS (карточка CQUAD8) | .card | .ID | .Prop_ID | .G(8,1) | .T1 | .T2 | .T3 | .T4 | .THETA_MCID | .ZOFFS | .TFLAG | .Ori_type (CID | Angle) |
% ELEMENTS (карточка CTRIA3) | .card | .ID | .Prop_ID | .G(3,1) | .THETA_MCID | .ZOFFS | .TFLAG | .T1 | .T2 | .T3 | .Ori_type (CID | Angle) |
% ELEMENTS (карточка CTRIA6) | .card | .ID | .Prop_ID | .G(6,1) | .THETA_MCID | .ZOFFS | .T1 | .T2 | .T3 | .TFLAG | .Ori_type (CID | Angle) |
% ELEMENTS (карточка  CBUSH) | .card | .ID | .Prop_ID | .GA | .GB | .GO | .X1 | .X2 | .X3 | .CID | .S | .OCID | .S1 | .S2 | .S3 |
% ELEMENTS (карточка   CROD) | .card | .ID | .Prop_ID | .G1 | .G2 |
% ELEMENTS (карточка   CBAR) | .card | .ID | .Prop_ID | .GA | .GB | .G0 | .X1 | .X2 | .X3 | .OFFT | .PA | .PB | .W1A | .W2A | .W3A | .W1B | .W2B | .W3B |
% ELEMENTS (карточка  CBEAM) | .card | .ID | .Prop_ID | .GA | .GB | .G0 | .X1 | .X2 | .X3 | .OFFT | .BIT | .PA | .PB | .W1A | .W2A | .W3A | .W1B | .W2B | .W3B | .SA | .SB |

global ErrCode;

global Progress_Bar_Segments;
global Progress_Bar_Delay;
global Progress_Bar_Elm_Threshold;

global AT_NODES;
global AT_PSETS;
global AT_COORD;

global BDF_Entity_Read_Settings;

fprintf (1, 'Проверка элементов...                   ');

% Установка настроек проверок

switch BDF_Entity_Read_Settings.Read_NODES
    case 'ON'
        Node_Related_Checks = 1;
    case 'OFF'
        Node_Related_Checks = 0;
    otherwise
        fprintf (1, '\nОшибка: непредвиденное значение параметра чтения BDF_Entity_Read_Settings.Read_NODES [%s] !\n', BDF_Entity_Read_Settings.Read_NODES);
        ErrCode = -1;
        return;
end

switch BDF_Entity_Read_Settings.Read_PSETS_ELEMENTS
    case 'ON'
        Pset_Related_Checks = 1;
    case 'OFF'
        Pset_Related_Checks = 0;
    otherwise
        fprintf (1, '\nОшибка: непредвиденное значение параметра чтения BDF_Entity_Read_Settings.Read_PSETS_ELEMENTS [%s] !\n', BDF_Entity_Read_Settings.Read_PSETS_ELEMENTS);
        ErrCode = -1;
        return;
end

switch BDF_Entity_Read_Settings.Read_COORD
    case 'ON'
        Coord_Related_Checks = 1;
    case 'OFF'
        Coord_Related_Checks = 0;
    otherwise
        fprintf (1, '\nОшибка: непредвиденное значение параметра чтения BDF_Entity_Read_Settings.Read_COORD [%s] !\n', BDF_Entity_Read_Settings.Read_COORD);
        ErrCode = -1;
        return;
end


if (size(ELEMENTS,1) > Progress_Bar_Elm_Threshold)

    % Для вывода прогресса
    Time_segments = Progress_Bar_Segments;
    N_records = size(ELEMENTS,1);
    N_rec_segm = floor(N_records/Time_segments);
    Counter = 0;
    Counter_2 = 0;
    Written_count = 0;

end


if (~isempty(AT_NODES))
    Max_Node_Number = size(AT_NODES,1);
else
    Max_Node_Number = 0;
end

if (~isempty(AT_PSETS))
    Max_Pset_Number = size(AT_PSETS,1);
else
    Max_Pset_Number = 0;
end

if (~isempty(AT_COORD))
    Max_Coord_Number = size(AT_COORD,1);
else
    Max_Coord_Number = 0;
end

Prop_Usage_Table = zeros(size(AT_NODES,1),1);

for i=1:size(ELEMENTS,1)
    
    switch ELEMENTS{i}.card
        
        case 'CQUAD4'
            
            % Проверка на допустимость полей карточки
            if (~isempty(ELEMENTS{i}.TFLAG))
                fprintf (1, '\nОбнаружена запись TFLAG в карточке элемента с номером %i [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                fprintf (1, 'Карточки %s c полем TFLAG не поддерживаются в текущей версии программы.\n', ELEMENTS{i}.card);
                fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                return;
            end
            
            if (~isempty(ELEMENTS{i}.T1))
                fprintf (1, '\nОбнаружена запись T1 в карточке элемента с номером %i [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                fprintf (1, 'Карточки %s c полем T1 не поддерживаются в текущей версии программы.\n', ELEMENTS{i}.card);
                fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                return;
            end
            
            if (~isempty(ELEMENTS{i}.T2))
                fprintf (1, '\nОбнаружена запись T2 в карточке элемента с номером %i [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                fprintf (1, 'Карточки %s c полем T2 не поддерживаются в текущей версии программы.\n', ELEMENTS{i}.card);
                fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                return;
            end
            
            if (~isempty(ELEMENTS{i}.T3))
                fprintf (1, '\nОбнаружена запись T3 в карточке элемента с номером %i [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                fprintf (1, 'Карточки %s c полем T3 не поддерживаются в текущей версии программы.\n', ELEMENTS{i}.card);
                fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                return;
            end
            
            if (~isempty(ELEMENTS{i}.T4))
                fprintf (1, '\nОбнаружена запись T4 в карточке элемента с номером %i [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                fprintf (1, 'Карточки %s c полем T4 не поддерживаются в текущей версии программы.\n', ELEMENTS{i}.card);
                fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                return;
            end
            
            % Проверка на существование property set
            if (Pset_Related_Checks == 1)
                if (ELEMENTS{i}.Prop_ID > Max_Pset_Number)
                    fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий property set %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.Prop_ID);
                    ErrCode = -1;
                    return;
                end
                if (AT_PSETS(ELEMENTS{i}.Prop_ID) == 0)
                    fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий property set %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.Prop_ID);
                    ErrCode = -1;
                    return;
                end
                Prop_Usage_Table(ELEMENTS{i}.Prop_ID) = 1;
            end
            
            % Проверка на тип property set
            
            if (Pset_Related_Checks == 1)
            
                switch PSETS{AT_PSETS(ELEMENTS{i}.Prop_ID)}.card

                    case 'PSHELL'

                        % Допустимый property set

                    case 'PCOMP'

                        % Допустимый property set

                    case 'PCOMPG'

                        % Допустимый property set

                    case 'PLPLANE'

                        fprintf (1, '\nЭлемент %i типа %s ссылается на недопустимый property set %s с номером %i типа %s !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, PSETS{AT_PSETS(ELEMENTS{i}.Prop_ID)}.Patran_name, ELEMENTS{i}.Prop_ID, PSETS{AT_PSETS(ELEMENTS{i}.Prop_ID)}.card);
                        fprintf (1, 'Карточки оболочечных элементов, ссылающиеся на property set типа %s, не поддерживаются в текущей версии программы.\n', PSETS{AT_PSETS(ELEMENTS{i}.Prop_ID)}.card);
                        fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                        ErrCode = -1;
                        return;

                    otherwise

                        fprintf (1, '\nЭлемент %i типа %s ссылается на недопустимый property set %s с номером %i типа %s !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, PSETS{AT_PSETS(ELEMENTS{i}.Prop_ID)}.Patran_name, ELEMENTS{i}.Prop_ID, PSETS{AT_PSETS(ELEMENTS{i}.Prop_ID)}.card);
                        ErrCode = -1;
                        return;

                end
            
            end
            
            if ((~isempty(ELEMENTS{i}.Ori_type)) && strcmp(ELEMENTS{i}.Ori_type, 'CID'))
            
                % Проверка на допустимость номера системы координат
                if (Coord_Related_Checks == 1)
                    if (ELEMENTS{i}.THETA_MCID < 0)
                        fprintf (1, '\nНедопустимый номер системы координат %i в элементе с номером %i [%s]  !\n', ELEMENTS{i}.THETA_MCID, ELEMENTS{i}.ID, ELEMENTS{i}.card);
                        ErrCode = -1;
                        return;
                    end
                end

                % Проверка на существование системы координат
                if (Coord_Related_Checks == 1)
                    if (ELEMENTS{i}.THETA_MCID > 0)
                        if (ELEMENTS{i}.THETA_MCID > Max_Coord_Number)
                            fprintf (1, '\nЭлемент с номером %i [%s] ссылается на несуществующую систему координат %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.THETA_MCID);
                            ErrCode = -1;
                            return;
                        end
                        if (AT_COORD(ELEMENTS{i}.THETA_MCID) == 0)
                            fprintf (1, '\nЭлемент с номером %i [%s] ссылается на несуществующую систему координат %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.THETA_MCID);
                            ErrCode = -1;
                            return;
                        end
                    end
                end

                % Проверка на тип системы координат
                if (Coord_Related_Checks == 1)
                    if (ELEMENTS{i}.THETA_MCID > 0)
                        if (~strcmp(COORD{AT_COORD(ELEMENTS{i}.THETA_MCID)}.card, 'CORD2R'))
                            fprintf (1, '\nЭлемент с номером %i [%s] ссылается на систему координат %i недопустимого типа [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.THETA_MCID, COORD{AT_COORD(ELEMENTS{i}.THETA_MCID)}.card);
                            fprintf (1, 'Ссылки элементов на цилиндрические или сферические системы координат не поддерживаются в текущей версии программы.\n');
                            fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                            ErrCode = -1;
                            return;
                        end
                    end
                end
            
            end
            
            % Проверка на пропуски узлов
            for j=1:size(ELEMENTS{i}.G, 1)
                
                if (ELEMENTS{i}.G(j) == 0)
                    fprintf (1, '\nОбнаружен пропуск узла № %i в элементе %i типа %s !\n', j, ELEMENTS{i}.ID, ELEMENTS{i}.card);
                    fprintf (1, 'Карточки оболочечных элементов с пропусками узлов не поддерживаются в текущей версии программы.\n');
                    fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    return;
                end
                
            end
            
            % Проверка на существование узлов
            if (Node_Related_Checks == 1)
                for j=1:size(ELEMENTS{i}.G, 1)

                    if (ELEMENTS{i}.G(j) > Max_Node_Number)
                        fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий узел %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.G(j));
                        ErrCode = -1;
                        return;
                    end
                    if (AT_NODES(ELEMENTS{i}.G(j)) == 0)
                        fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий узел %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.G(j));
                        ErrCode = -1;
                        return;
                    end

                end
            end
            
        case 'CQUAD8'
            
            % Проверка на допустимость полей карточки
            if (~isempty(ELEMENTS{i}.TFLAG))
                fprintf (1, '\nОбнаружена запись TFLAG в карточке элемента с номером %i [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                fprintf (1, 'Карточки %s c полем TFLAG не поддерживаются в текущей версии программы.\n', ELEMENTS{i}.card);
                fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                return;
            end
            
            if (~isempty(ELEMENTS{i}.T1))
                fprintf (1, '\nОбнаружена запись T1 в карточке элемента с номером %i [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                fprintf (1, 'Карточки %s c полем T1 не поддерживаются в текущей версии программы.\n', ELEMENTS{i}.card);
                fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                return;
            end
            
            if (~isempty(ELEMENTS{i}.T2))
                fprintf (1, '\nОбнаружена запись T2 в карточке элемента с номером %i [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                fprintf (1, 'Карточки %s c полем T2 не поддерживаются в текущей версии программы.\n', ELEMENTS{i}.card);
                fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                return;
            end
            
            if (~isempty(ELEMENTS{i}.T3))
                fprintf (1, '\nОбнаружена запись T3 в карточке элемента с номером %i [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                fprintf (1, 'Карточки %s c полем T3 не поддерживаются в текущей версии программы.\n', ELEMENTS{i}.card);
                fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                return;
            end
            
            if (~isempty(ELEMENTS{i}.T4))
                fprintf (1, '\nОбнаружена запись T4 в карточке элемента с номером %i [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                fprintf (1, 'Карточки %s c полем T4 не поддерживаются в текущей версии программы.\n', ELEMENTS{i}.card);
                fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                return;
            end
            
            % Проверка на существование property set
            if (Pset_Related_Checks == 1)
                if (ELEMENTS{i}.Prop_ID > Max_Pset_Number)
                    fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий property set %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.Prop_ID);
                    ErrCode = -1;
                    return;
                end
                if (AT_PSETS(ELEMENTS{i}.Prop_ID) == 0)
                    fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий property set %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.Prop_ID);
                    ErrCode = -1;
                    return;
                end
                Prop_Usage_Table(ELEMENTS{i}.Prop_ID) = 1;
            end
            
            % Проверка на тип property set
            
            if (Pset_Related_Checks == 1)
            
                switch PSETS{AT_PSETS(ELEMENTS{i}.Prop_ID)}.card

                    case 'PSHELL'

                        % Допустимый property set

                    case 'PCOMP'

                        % Допустимый property set

                    case 'PCOMPG'

                        % Допустимый property set

                    case 'PLPLANE'

                        fprintf (1, '\nЭлемент %i типа %s ссылается на недопустимый property set %s с номером %i типа %s !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, PSETS{AT_PSETS(ELEMENTS{i}.Prop_ID)}.Patran_name, ELEMENTS{i}.Prop_ID, PSETS{AT_PSETS(ELEMENTS{i}.Prop_ID)}.card);
                        fprintf (1, 'Карточки оболочечных элементов, ссылающиеся на property set типа %s, не поддерживаются в текущей версии программы.\n', PSETS{AT_PSETS(ELEMENTS{i}.Prop_ID)}.card);
                        fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                        ErrCode = -1;
                        return;

                    otherwise

                        fprintf (1, '\nЭлемент %i типа %s ссылается на недопустимый property set %s с номером %i типа %s !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, PSETS{AT_PSETS(ELEMENTS{i}.Prop_ID)}.Patran_name, ELEMENTS{i}.Prop_ID, PSETS{AT_PSETS(ELEMENTS{i}.Prop_ID)}.card);
                        ErrCode = -1;
                        return;

                end
            
            end
            
            if ((~isempty(ELEMENTS{i}.Ori_type)) && strcmp(ELEMENTS{i}.Ori_type, 'CID'))
            
                % Проверка на допустимость номера системы координат
                if (Coord_Related_Checks == 1)
                    if (ELEMENTS{i}.THETA_MCID < 0)
                        fprintf (1, '\nНедопустимый номер системы координат %i в элементе с номером %i [%s]  !\n', ELEMENTS{i}.THETA_MCID, ELEMENTS{i}.ID, ELEMENTS{i}.card);
                        ErrCode = -1;
                        return;
                    end
                end

                % Проверка на существование системы координат
                if (Coord_Related_Checks == 1)
                    if (ELEMENTS{i}.THETA_MCID > 0)
                        if (ELEMENTS{i}.THETA_MCID > Max_Coord_Number)
                            fprintf (1, '\nЭлемент с номером %i [%s] ссылается на несуществующую систему координат %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.THETA_MCID);
                            ErrCode = -1;
                            return;
                        end
                        if (AT_COORD(ELEMENTS{i}.THETA_MCID) == 0)
                            fprintf (1, '\nЭлемент с номером %i [%s] ссылается на несуществующую систему координат %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.THETA_MCID);
                            ErrCode = -1;
                            return;
                        end
                    end
                end

                % Проверка на тип системы координат
                if (Coord_Related_Checks == 1)
                    if (ELEMENTS{i}.THETA_MCID > 0)
                        if (~strcmp(COORD{AT_COORD(ELEMENTS{i}.THETA_MCID)}.card, 'CORD2R'))
                            fprintf (1, '\nЭлемент с номером %i [%s] ссылается на систему координат %i недопустимого типа [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.THETA_MCID, COORD{AT_COORD(ELEMENTS{i}.THETA_MCID)}.card);
                            fprintf (1, 'Ссылки элементов на цилиндрические или сферические системы координат не поддерживаются в текущей версии программы.\n');
                            fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                            ErrCode = -1;
                            return;
                        end
                    end
                end
            
            end
            
            % Проверка на пропуски узлов
            for j=1:size(ELEMENTS{i}.G, 1)
                
                if (ELEMENTS{i}.G(j) == 0)
                    fprintf (1, '\nОбнаружен пропуск узла № %i в элементе %i типа %s !\n', j, ELEMENTS{i}.ID, ELEMENTS{i}.card);
                    fprintf (1, 'Карточки оболочечных элементов с пропусками узлов не поддерживаются в текущей версии программы.\n');
                    fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    return;
                end
                
            end
            
            % Проверка на существование узлов
            if (Node_Related_Checks == 1)
                for j=1:size(ELEMENTS{i}.G, 1)

                    if (ELEMENTS{i}.G(j) > Max_Node_Number)
                        fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий узел %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.G(j));
                        ErrCode = -1;
                        return;
                    end
                    if (AT_NODES(ELEMENTS{i}.G(j)) == 0)
                        fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий узел %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.G(j));
                        ErrCode = -1;
                        return;
                    end

                end
            end
            
        case 'CTRIA3'
            
            % Проверка на допустимость полей карточки
            if (~isempty(ELEMENTS{i}.TFLAG))
                fprintf (1, '\nОбнаружена запись TFLAG в карточке элемента с номером %i [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                fprintf (1, 'Карточки %s c полем TFLAG не поддерживаются в текущей версии программы.\n', ELEMENTS{i}.card);
                fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                return;
            end
            
            if (~isempty(ELEMENTS{i}.T1))
                fprintf (1, '\nОбнаружена запись T1 в карточке элемента с номером %i [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                fprintf (1, 'Карточки %s c полем T1 не поддерживаются в текущей версии программы.\n', ELEMENTS{i}.card);
                fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                return;
            end
            
            if (~isempty(ELEMENTS{i}.T2))
                fprintf (1, '\nОбнаружена запись T2 в карточке элемента с номером %i [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                fprintf (1, 'Карточки %s c полем T2 не поддерживаются в текущей версии программы.\n', ELEMENTS{i}.card);
                fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                return;
            end
            
            if (~isempty(ELEMENTS{i}.T3))
                fprintf (1, '\nОбнаружена запись T3 в карточке элемента с номером %i [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                fprintf (1, 'Карточки %s c полем T3 не поддерживаются в текущей версии программы.\n', ELEMENTS{i}.card);
                fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                return;
            end
            
            % Проверка на существование property set
            if (Pset_Related_Checks == 1)
                if (ELEMENTS{i}.Prop_ID > Max_Pset_Number)
                    fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий property set %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.Prop_ID);
                    ErrCode = -1;
                    return;
                end
                if (AT_PSETS(ELEMENTS{i}.Prop_ID) == 0)
                    fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий property set %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.Prop_ID);
                    ErrCode = -1;
                    return;
                end
                Prop_Usage_Table(ELEMENTS{i}.Prop_ID) = 1;
            end
            
            % Проверка на тип property set
            
            if (Pset_Related_Checks == 1)
            
                switch PSETS{AT_PSETS(ELEMENTS{i}.Prop_ID)}.card

                    case 'PSHELL'

                        % Допустимый property set

                    case 'PCOMP'

                        % Допустимый property set

                    case 'PCOMPG'

                        % Допустимый property set

                    case 'PLPLANE'

                        fprintf (1, '\nЭлемент %i типа %s ссылается на недопустимый property set %s с номером %i типа %s !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, PSETS{AT_PSETS(ELEMENTS{i}.Prop_ID)}.Patran_name, ELEMENTS{i}.Prop_ID, PSETS{AT_PSETS(ELEMENTS{i}.Prop_ID)}.card);
                        fprintf (1, 'Карточки оболочечных элементов, ссылающиеся на property set типа %s, не поддерживаются в текущей версии программы.\n', PSETS{AT_PSETS(ELEMENTS{i}.Prop_ID)}.card);
                        fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                        ErrCode = -1;
                        return;

                    otherwise

                        fprintf (1, '\nЭлемент %i типа %s ссылается на недопустимый property set %s с номером %i типа %s !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, PSETS{AT_PSETS(ELEMENTS{i}.Prop_ID)}.Patran_name, ELEMENTS{i}.Prop_ID, PSETS{AT_PSETS(ELEMENTS{i}.Prop_ID)}.card);
                        ErrCode = -1;
                        return;

                end
            
            end
            
            if ((~isempty(ELEMENTS{i}.Ori_type)) && strcmp(ELEMENTS{i}.Ori_type, 'CID'))
            
                % Проверка на допустимость номера системы координат
                if (Coord_Related_Checks == 1)
                    if (ELEMENTS{i}.THETA_MCID < 0)
                        fprintf (1, '\nНедопустимый номер системы координат %i в элементе с номером %i [%s]  !\n', ELEMENTS{i}.THETA_MCID, ELEMENTS{i}.ID, ELEMENTS{i}.card);
                        ErrCode = -1;
                        return;
                    end
                end

                % Проверка на существование системы координат
                if (Coord_Related_Checks == 1)
                    if (ELEMENTS{i}.THETA_MCID > 0)
                        if (ELEMENTS{i}.THETA_MCID > Max_Coord_Number)
                            fprintf (1, '\nЭлемент с номером %i [%s] ссылается на несуществующую систему координат %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.THETA_MCID);
                            ErrCode = -1;
                            return;
                        end
                        if (AT_COORD(ELEMENTS{i}.THETA_MCID) == 0)
                            fprintf (1, '\nЭлемент с номером %i [%s] ссылается на несуществующую систему координат %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.THETA_MCID);
                            ErrCode = -1;
                            return;
                        end
                    end
                end

                % Проверка на тип системы координат
                if (Coord_Related_Checks == 1)
                    if (ELEMENTS{i}.THETA_MCID > 0)
                        if (~strcmp(COORD{AT_COORD(ELEMENTS{i}.THETA_MCID)}.card, 'CORD2R'))
                            fprintf (1, '\nЭлемент с номером %i [%s] ссылается на систему координат %i недопустимого типа [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.THETA_MCID, COORD{AT_COORD(ELEMENTS{i}.THETA_MCID)}.card);
                            fprintf (1, 'Ссылки элементов на цилиндрические или сферические системы координат не поддерживаются в текущей версии программы.\n');
                            fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                            ErrCode = -1;
                            return;
                        end
                    end
                end
            
            end
            
            % Проверка на пропуски узлов
            for j=1:size(ELEMENTS{i}.G, 1)
                
                if (ELEMENTS{i}.G(j) == 0)
                    fprintf (1, '\nОбнаружен пропуск узла № %i в элементе %i типа %s !\n', j, ELEMENTS{i}.ID, ELEMENTS{i}.card);
                    fprintf (1, 'Карточки оболочечных элементов с пропусками узлов не поддерживаются в текущей версии программы.\n');
                    fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    return;
                end
                
            end
            
            % Проверка на существование узлов
            if (Node_Related_Checks == 1)
                for j=1:size(ELEMENTS{i}.G, 1)

                    if (ELEMENTS{i}.G(j) > Max_Node_Number)
                        fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий узел %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.G(j));
                        ErrCode = -1;
                        return;
                    end
                    if (AT_NODES(ELEMENTS{i}.G(j)) == 0)
                        fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий узел %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.G(j));
                        ErrCode = -1;
                        return;
                    end

                end
            end
            
        case 'CTRIA6'
            
            % Проверка на допустимость полей карточки
            if (~isempty(ELEMENTS{i}.TFLAG))
                fprintf (1, '\nОбнаружена запись TFLAG в карточке элемента с номером %i [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                fprintf (1, 'Карточки %s c полем TFLAG не поддерживаются в текущей версии программы.\n', ELEMENTS{i}.card);
                fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                return;
            end
            
            if (~isempty(ELEMENTS{i}.T1))
                fprintf (1, '\nОбнаружена запись T1 в карточке элемента с номером %i [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                fprintf (1, 'Карточки %s c полем T1 не поддерживаются в текущей версии программы.\n', ELEMENTS{i}.card);
                fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                return;
            end
            
            if (~isempty(ELEMENTS{i}.T2))
                fprintf (1, '\nОбнаружена запись T2 в карточке элемента с номером %i [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                fprintf (1, 'Карточки %s c полем T2 не поддерживаются в текущей версии программы.\n', ELEMENTS{i}.card);
                fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                return;
            end
            
            if (~isempty(ELEMENTS{i}.T3))
                fprintf (1, '\nОбнаружена запись T3 в карточке элемента с номером %i [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                fprintf (1, 'Карточки %s c полем T3 не поддерживаются в текущей версии программы.\n', ELEMENTS{i}.card);
                fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                return;
            end
            
            % Проверка на существование property set
            if (Pset_Related_Checks == 1)
                if (ELEMENTS{i}.Prop_ID > Max_Pset_Number)
                    fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий property set %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.Prop_ID);
                    ErrCode = -1;
                    return;
                end
                if (AT_PSETS(ELEMENTS{i}.Prop_ID) == 0)
                    fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий property set %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.Prop_ID);
                    ErrCode = -1;
                    return;
                end
                Prop_Usage_Table(ELEMENTS{i}.Prop_ID) = 1;
            end
            
            % Проверка на тип property set
            
            if (Pset_Related_Checks == 1)
            
                switch PSETS{AT_PSETS(ELEMENTS{i}.Prop_ID)}.card

                    case 'PSHELL'

                        % Допустимый property set

                    case 'PCOMP'

                        % Допустимый property set

                    case 'PCOMPG'

                        % Допустимый property set

                    case 'PLPLANE'

                        fprintf (1, '\nЭлемент %i типа %s ссылается на недопустимый property set %s с номером %i типа %s !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, PSETS{AT_PSETS(ELEMENTS{i}.Prop_ID)}.Patran_name, ELEMENTS{i}.Prop_ID, PSETS{AT_PSETS(ELEMENTS{i}.Prop_ID)}.card);
                        fprintf (1, 'Карточки оболочечных элементов, ссылающиеся на property set типа %s, не поддерживаются в текущей версии программы.\n', PSETS{AT_PSETS(ELEMENTS{i}.Prop_ID)}.card);
                        fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                        ErrCode = -1;
                        return;

                    otherwise

                        fprintf (1, '\nЭлемент %i типа %s ссылается на недопустимый property set %s с номером %i типа %s !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, PSETS{AT_PSETS(ELEMENTS{i}.Prop_ID)}.Patran_name, ELEMENTS{i}.Prop_ID, PSETS{AT_PSETS(ELEMENTS{i}.Prop_ID)}.card);
                        ErrCode = -1;
                        return;

                end
            
            end
            
            if ((~isempty(ELEMENTS{i}.Ori_type)) && strcmp(ELEMENTS{i}.Ori_type, 'CID'))
            
                % Проверка на допустимость номера системы координат
                if (Coord_Related_Checks == 1)
                    if (ELEMENTS{i}.THETA_MCID < 0)
                        fprintf (1, '\nНедопустимый номер системы координат %i в элементе с номером %i [%s]  !\n', ELEMENTS{i}.THETA_MCID, ELEMENTS{i}.ID, ELEMENTS{i}.card);
                        ErrCode = -1;
                        return;
                    end
                end

                % Проверка на существование системы координат
                if (Coord_Related_Checks == 1)
                    if (ELEMENTS{i}.THETA_MCID > 0)
                        if (ELEMENTS{i}.THETA_MCID > Max_Coord_Number)
                            fprintf (1, '\nЭлемент с номером %i [%s] ссылается на несуществующую систему координат %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.THETA_MCID);
                            ErrCode = -1;
                            return;
                        end
                        if (AT_COORD(ELEMENTS{i}.THETA_MCID) == 0)
                            fprintf (1, '\nЭлемент с номером %i [%s] ссылается на несуществующую систему координат %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.THETA_MCID);
                            ErrCode = -1;
                            return;
                        end
                    end
                end

                % Проверка на тип системы координат
                if (Coord_Related_Checks == 1)
                    if (ELEMENTS{i}.THETA_MCID > 0)
                        if (~strcmp(COORD{AT_COORD(ELEMENTS{i}.THETA_MCID)}.card, 'CORD2R'))
                            fprintf (1, '\nЭлемент с номером %i [%s] ссылается на систему координат %i недопустимого типа [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.THETA_MCID, COORD{AT_COORD(ELEMENTS{i}.THETA_MCID)}.card);
                            fprintf (1, 'Ссылки элементов на цилиндрические или сферические системы координат не поддерживаются в текущей версии программы.\n');
                            fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                            ErrCode = -1;
                            return;
                        end
                    end
                end
            
            end
            
            % Проверка на пропуски узлов
            for j=1:size(ELEMENTS{i}.G, 1)
                
                if (ELEMENTS{i}.G(j) == 0)
                    fprintf (1, '\nОбнаружен пропуск узла № %i в элементе %i типа %s !\n', j, ELEMENTS{i}.ID, ELEMENTS{i}.card);
                    fprintf (1, 'Карточки оболочечных элементов с пропусками узлов не поддерживаются в текущей версии программы.\n');
                    fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    return;
                end
                
            end
            
            % Проверка на существование узлов
            if (Node_Related_Checks == 1)
                for j=1:size(ELEMENTS{i}.G, 1)

                    if (ELEMENTS{i}.G(j) > Max_Node_Number)
                        fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий узел %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.G(j));
                        ErrCode = -1;
                        return;
                    end
                    if (AT_NODES(ELEMENTS{i}.G(j)) == 0)
                        fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий узел %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.G(j));
                        ErrCode = -1;
                        return;
                    end

                end
            end
            
        case 'CTETRA'
            
            % Проверка на существование property set
            if (Pset_Related_Checks == 1)
                if (ELEMENTS{i}.Prop_ID > Max_Pset_Number)
                    fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий property set %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.Prop_ID);
                    ErrCode = -1;
                    return;
                end
                if (AT_PSETS(ELEMENTS{i}.Prop_ID) == 0)
                    fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий property set %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.Prop_ID);
                    ErrCode = -1;
                    return;
                end
                Prop_Usage_Table(ELEMENTS{i}.Prop_ID) = 1;
            end
            
            % Проверка на тип property set
            if (Pset_Related_Checks == 1)
                if (~strcmp(PSETS{AT_PSETS(ELEMENTS{i}.Prop_ID)}.card, 'PSOLID'))
                    fprintf (1, '\nЭлемент %i типа %s ссылается на недопустимый property set %s с номером %i типа %s !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, PSETS{AT_PSETS(ELEMENTS{i}.Prop_ID)}.Patran_name, ELEMENTS{i}.Prop_ID, PSETS{AT_PSETS(ELEMENTS{i}.Prop_ID)}.card);
                    fprintf (1, 'Карточки твердотельных элементов, ссылающиеся на property set типа %s, не поддерживаются в текущей версии программы.\n', PSETS{AT_PSETS(ELEMENTS{i}.Prop_ID)}.card);
                    fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    return;
                end
            end
                        
            % Проверка на пропуски узлов
            for j=1:ELEMENTS{i}.N_nodes
                
                if (ELEMENTS{i}.Nodes(j) == 0)
                    fprintf (1, '\nОбнаружен пропуск узла № %i в элементе %i типа %s !\n', j, ELEMENTS{i}.ID, ELEMENTS{i}.card);
                    fprintf (1, 'Карточки твердотельных элементов с пропусками узлов не поддерживаются в текущей версии программы.\n');
                    fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    return;
                end
                
            end
            
            % Проверка на существование узлов
            if (Node_Related_Checks == 1)
                for j=1:ELEMENTS{i}.N_nodes

                    if (ELEMENTS{i}.Nodes(j) > Max_Node_Number)
                        fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий узел %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.Nodes(j));
                        ErrCode = -1;
                        return;
                    end
                    if (AT_NODES(ELEMENTS{i}.Nodes(j)) == 0)
                        fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий узел %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.Nodes(j));
                        ErrCode = -1;
                        return;
                    end

                end
            end
            
            % Проверка на число узлов
            if ((ELEMENTS{i}.N_nodes ~= 4) && (ELEMENTS{i}.N_nodes ~= 10))
                fprintf (1, '\nЧисло узлов в элементе %i типа %s равно %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.N_nodes);
                fprintf (1, 'Элементы типа %s с числом узлов, отличным от 4 или 10, не поддерживаются в текущей версии программы.\n', ELEMENTS{i}.card);
                fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                return;
            end
            
        case 'CPENTA'
            
            % Проверка на существование property set
            if (Pset_Related_Checks == 1)
                if (ELEMENTS{i}.Prop_ID > Max_Pset_Number)
                    fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий property set %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.Prop_ID);
                    ErrCode = -1;
                    return;
                end
                if (AT_PSETS(ELEMENTS{i}.Prop_ID) == 0)
                    fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий property set %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.Prop_ID);
                    ErrCode = -1;
                    return;
                end
                Prop_Usage_Table(ELEMENTS{i}.Prop_ID) = 1;
            end
            
            % Проверка на тип property set
            if (Pset_Related_Checks == 1)
                if (~strcmp(PSETS{AT_PSETS(ELEMENTS{i}.Prop_ID)}.card, 'PSOLID'))
                    fprintf (1, '\nЭлемент %i типа %s ссылается на недопустимый property set %s с номером %i типа %s !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, PSETS{AT_PSETS(ELEMENTS{i}.Prop_ID)}.Patran_name, ELEMENTS{i}.Prop_ID, PSETS{AT_PSETS(ELEMENTS{i}.Prop_ID)}.card);
                    fprintf (1, 'Карточки твердотельных элементов, ссылающиеся на property set типа %s, не поддерживаются в текущей версии программы.\n', PSETS{AT_PSETS(ELEMENTS{i}.Prop_ID)}.card);
                    fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    return;
                end
            end
                        
            % Проверка на пропуски узлов
            for j=1:ELEMENTS{i}.N_nodes
                
                if (ELEMENTS{i}.Nodes(j) == 0)
                    fprintf (1, '\nОбнаружен пропуск узла № %i в элементе %i типа %s !\n', j, ELEMENTS{i}.ID, ELEMENTS{i}.card);
                    fprintf (1, 'Карточки твердотельных элементов с пропусками узлов не поддерживаются в текущей версии программы.\n');
                    fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    return;
                end
                
            end
            
            % Проверка на существование узлов
            if (Node_Related_Checks == 1)
                for j=1:ELEMENTS{i}.N_nodes

                    if (ELEMENTS{i}.Nodes(j) > Max_Node_Number)
                        fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий узел %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.Nodes(j));
                        ErrCode = -1;
                        return;
                    end
                    if (AT_NODES(ELEMENTS{i}.Nodes(j)) == 0)
                        fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий узел %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.Nodes(j));
                        ErrCode = -1;
                        return;
                    end

                end
            end
            
            % Проверка на число узлов
            if ((ELEMENTS{i}.N_nodes ~= 6) && (ELEMENTS{i}.N_nodes ~= 15))
                fprintf (1, '\nЧисло узлов в элементе %i типа %s равно %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.N_nodes);
                fprintf (1, 'Элементы типа %s с числом узлов, отличным от 6 или 15, не поддерживаются в текущей версии программы.\n', ELEMENTS{i}.card);
                fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                return;
            end
            
        case 'CHEXA'
            
            % Проверка на существование property set
            if (Pset_Related_Checks == 1)
                if (ELEMENTS{i}.Prop_ID > Max_Pset_Number)
                    fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий property set %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.Prop_ID);
                    ErrCode = -1;
                    return;
                end
                if (AT_PSETS(ELEMENTS{i}.Prop_ID) == 0)
                    fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий property set %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.Prop_ID);
                    ErrCode = -1;
                    return;
                end
                Prop_Usage_Table(ELEMENTS{i}.Prop_ID) = 1;
            end
            
            % Проверка на тип property set
            if (Pset_Related_Checks == 1)
                if (~strcmp(PSETS{AT_PSETS(ELEMENTS{i}.Prop_ID)}.card, 'PSOLID'))
                    fprintf (1, '\nЭлемент %i типа %s ссылается на недопустимый property set %s с номером %i типа %s !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, PSETS{AT_PSETS(ELEMENTS{i}.Prop_ID)}.Patran_name, ELEMENTS{i}.Prop_ID, PSETS{AT_PSETS(ELEMENTS{i}.Prop_ID)}.card);
                    fprintf (1, 'Карточки твердотельных элементов, ссылающиеся на property set типа %s, не поддерживаются в текущей версии программы.\n', PSETS{AT_PSETS(ELEMENTS{i}.Prop_ID)}.card);
                    fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    return;
                end
            end
                        
            % Проверка на пропуски узлов
            for j=1:ELEMENTS{i}.N_nodes
                
                if (ELEMENTS{i}.Nodes(j) == 0)
                    fprintf (1, '\nОбнаружен пропуск узла № %i в элементе %i типа %s !\n', j, ELEMENTS{i}.ID, ELEMENTS{i}.card);
                    fprintf (1, 'Карточки твердотельных элементов с пропусками узлов не поддерживаются в текущей версии программы.\n');
                    fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    return;
                end
                
            end
            
            % Проверка на существование узлов
            if (Node_Related_Checks == 1)
                for j=1:ELEMENTS{i}.N_nodes

                    if (ELEMENTS{i}.Nodes(j) > Max_Node_Number)
                        fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий узел %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.Nodes(j));
                        ErrCode = -1;
                        return;
                    end
                    if (AT_NODES(ELEMENTS{i}.Nodes(j)) == 0)
                        fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий узел %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.Nodes(j));
                        ErrCode = -1;
                        return;
                    end

                end
            end
            
            % Проверка на число узлов
            if ((ELEMENTS{i}.N_nodes ~= 8) && (ELEMENTS{i}.N_nodes ~= 20))
                fprintf (1, '\nЧисло узлов в элементе %i типа %s равно %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.N_nodes);
                fprintf (1, 'Элементы типа %s с числом узлов, отличным от 8 или 20, не поддерживаются в текущей версии программы.\n', ELEMENTS{i}.card);
                fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                return;
            end
            
        case 'CBUSH'
            
            % Проверка на допустимость полей карточки
            if (~isempty(ELEMENTS{i}.S1))
                fprintf (1, '\nОбнаружена запись S1 в карточке элемента с номером %i [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                fprintf (1, 'Карточки %s c полем S1 не поддерживаются в текущей версии программы.\n', ELEMENTS{i}.card);
                fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                return;
            end
            
            if (~isempty(ELEMENTS{i}.S2))
                fprintf (1, '\nОбнаружена запись S2 в карточке элемента с номером %i [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                fprintf (1, 'Карточки %s c полем S2 не поддерживаются в текущей версии программы.\n', ELEMENTS{i}.card);
                fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                return;
            end
            
            if (~isempty(ELEMENTS{i}.S3))
                fprintf (1, '\nОбнаружена запись S3 в карточке элемента с номером %i [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                fprintf (1, 'Карточки %s c полем S3 не поддерживаются в текущей версии программы.\n', ELEMENTS{i}.card);
                fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                return;
            end
            
            if (~isempty(ELEMENTS{i}.OCID))
                fprintf (1, '\nОбнаружена запись OCID в карточке элемента с номером %i [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                fprintf (1, 'Карточки %s c полем OCID не поддерживаются в текущей версии программы.\n', ELEMENTS{i}.card);
                fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                return;
            end
            
            if (~isempty(ELEMENTS{i}.S))
                if (ELEMENTS{i}.S ~= 0.5)
                    fprintf (1, '\nОбнаружено отличное от 0.5 значение параметра S в карточке элемента с номером %i [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                    fprintf (1, 'Отличное от 0.5 значение параметра S в карточке %s не поддерживаются в текущей версии программы.\n', ELEMENTS{i}.card);
                    fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    return;
                end
            end
            
            if (~isempty(ELEMENTS{i}.GO))
                fprintf (1, '\nОбнаружена запись GO в карточке элемента с номером %i [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                fprintf (1, 'Карточки %s c полем GO не поддерживаются в текущей версии программы.\n', ELEMENTS{i}.card);
                fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                return;
            end
            
            if (~isempty(ELEMENTS{i}.X1))
                fprintf (1, '\nОбнаружена запись X1 в карточке элемента с номером %i [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                fprintf (1, 'Карточки %s c полем X1 не поддерживаются в текущей версии программы.\n', ELEMENTS{i}.card);
                fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                return;
            end
            
            if (~isempty(ELEMENTS{i}.X2))
                fprintf (1, '\nОбнаружена запись X2 в карточке элемента с номером %i [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                fprintf (1, 'Карточки %s c полем X2 не поддерживаются в текущей версии программы.\n', ELEMENTS{i}.card);
                fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                return;
            end
            
            if (~isempty(ELEMENTS{i}.X3))
                fprintf (1, '\nОбнаружена запись X3 в карточке элемента с номером %i [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                fprintf (1, 'Карточки %s c полем X3 не поддерживаются в текущей версии программы.\n', ELEMENTS{i}.card);
                fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                return;
            end
            
            if (isempty(ELEMENTS{i}.GA))
                fprintf (1, '\nПустая запись GA в карточке элемента с номером %i [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                ErrCode = -1;
                return;
            end
            
            if (isempty(ELEMENTS{i}.GB))
                fprintf (1, '\nПустая запись GB в карточке элемента с номером %i [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                fprintf (1, 'Карточки %s c пустым полем GB не поддерживаются в текущей версии программы.\n', ELEMENTS{i}.card);
                fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                return;
            end
            
            if (isempty(ELEMENTS{i}.CID))
                fprintf (1, '\nПустая запись CID в карточке элемента с номером %i [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                fprintf (1, 'Карточки %s c пустым полем CID не поддерживаются в текущей версии программы.\n', ELEMENTS{i}.card);
                fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                return;
            end
            
            if (isempty(ELEMENTS{i}.Prop_ID))
                fprintf (1, '\nПустая запись PID в карточке элемента с номером %i [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                ErrCode = -1;
                return;
            end
            
            % Проверка на существование property set
            if (Pset_Related_Checks == 1)
                if (ELEMENTS{i}.Prop_ID > Max_Pset_Number)
                    fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий property set %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.Prop_ID);
                    ErrCode = -1;
                    return;
                end
                if (AT_PSETS(ELEMENTS{i}.Prop_ID) == 0)
                    fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий property set %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.Prop_ID);
                    ErrCode = -1;
                    return;
                end
                Prop_Usage_Table(ELEMENTS{i}.Prop_ID) = 1;
            end
            
            % Проверка на тип property set
            
            if (Pset_Related_Checks == 1)
            
                switch PSETS{AT_PSETS(ELEMENTS{i}.Prop_ID)}.card

                    case 'PBUSH'

                        % Допустимый property set

                    case 'PBUSHT'

                        fprintf (1, '\nЭлемент %i типа %s ссылается на недопустимый property set %s с номером %i типа %s !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, PSETS{AT_PSETS(ELEMENTS{i}.Prop_ID)}.Patran_name, ELEMENTS{i}.Prop_ID, PSETS{AT_PSETS(ELEMENTS{i}.Prop_ID)}.card);
                        fprintf (1, 'Карточки оболочечных элементов, ссылающиеся на property set типа %s, не поддерживаются в текущей версии программы.\n', PSETS{AT_PSETS(ELEMENTS{i}.Prop_ID)}.card);
                        fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                        ErrCode = -1;
                        return;

                    otherwise

                        fprintf (1, '\nЭлемент %i типа %s ссылается на недопустимый property set %s с номером %i типа %s !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, PSETS{AT_PSETS(ELEMENTS{i}.Prop_ID)}.Patran_name, ELEMENTS{i}.Prop_ID, PSETS{AT_PSETS(ELEMENTS{i}.Prop_ID)}.card);
                        ErrCode = -1;
                        return;

                end
            
            end
            
            if (~isempty(ELEMENTS{i}.CID))
            
                % Проверка на допустимость номера системы координат
                if (Coord_Related_Checks == 1)
                    if (ELEMENTS{i}.CID < 0)
                        fprintf (1, '\nНедопустимый номер системы координат %i в элементе с номером %i [%s]  !\n', ELEMENTS{i}.CID, ELEMENTS{i}.ID, ELEMENTS{i}.card);
                        ErrCode = -1;
                        return;
                    end
                end

                % Проверка на существование системы координат
                if (Coord_Related_Checks == 1)
                    if (ELEMENTS{i}.CID > 0)
                        if (ELEMENTS{i}.CID > Max_Coord_Number)
                            fprintf (1, '\nЭлемент с номером %i [%s] ссылается на несуществующую систему координат %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.CID);
                            ErrCode = -1;
                            return;
                        end
                        if (AT_COORD(ELEMENTS{i}.CID) == 0)
                            fprintf (1, '\nЭлемент с номером %i [%s] ссылается на несуществующую систему координат %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.CID);
                            ErrCode = -1;
                            return;
                        end
                    end
                end

                % Проверка на тип системы координат
                if (Coord_Related_Checks == 1)
                    if (ELEMENTS{i}.CID > 0)
                        if (~strcmp(COORD{AT_COORD(ELEMENTS{i}.CID)}.card, 'CORD2R'))
                            fprintf (1, '\nЭлемент с номером %i [%s] ссылается на систему координат %i недопустимого типа [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.CID, COORD{AT_COORD(ELEMENTS{i}.CID)}.card);
                            fprintf (1, 'Ссылки BUSH-элементов на цилиндрические или сферические системы координат не поддерживаются в текущей версии программы.\n');
                            fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                            ErrCode = -1;
                            return;
                        end
                    end
                end
            
            end
            
            % Проверка на существование узла GA
            if (Node_Related_Checks == 1)
                if (ELEMENTS{i}.GA > Max_Node_Number)
                    fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий узел %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.GA);
                    ErrCode = -1;
                    return;
                end
                if (AT_NODES(ELEMENTS{i}.GA) == 0)
                    fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий узел %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.GA);
                    ErrCode = -1;
                    return;
                end
            end
            
            % Проверка на существование узла GB
            if (Node_Related_Checks == 1)
                if (ELEMENTS{i}.GB > Max_Node_Number)
                    fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий узел %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.GB);
                    ErrCode = -1;
                    return;
                end
                if (AT_NODES(ELEMENTS{i}.GB) == 0)
                    fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий узел %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.GB);
                    ErrCode = -1;
                    return;
                end
            end
            
            % Проверка на различие GA и GB
            if (ELEMENTS{i}.GA == ELEMENTS{i}.GB)
                fprintf (1, '\nОшибка: GA = GB в элементе %i типа %s !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                ErrCode = -1;
                return;
            end
            
        case 'CROD'
            
            % Проверка на допустимость полей карточки
            
            if (isempty(ELEMENTS{i}.G1))
                fprintf (1, '\nПустая запись G1 в карточке элемента с номером %i [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                ErrCode = -1;
                return;
            end
            
            if (isempty(ELEMENTS{i}.G2))
                fprintf (1, '\nПустая запись G2 в карточке элемента с номером %i [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                ErrCode = -1;
                return;
            end
            
            if (isempty(ELEMENTS{i}.Prop_ID))
                fprintf (1, '\nПустая запись PID в карточке элемента с номером %i [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                ErrCode = -1;
                return;
            end
            
            % Проверка на существование property set
            if (Pset_Related_Checks == 1)
                if (ELEMENTS{i}.Prop_ID > Max_Pset_Number)
                    fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий property set %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.Prop_ID);
                    ErrCode = -1;
                    return;
                end
                if (AT_PSETS(ELEMENTS{i}.Prop_ID) == 0)
                    fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий property set %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.Prop_ID);
                    ErrCode = -1;
                    return;
                end
                Prop_Usage_Table(ELEMENTS{i}.Prop_ID) = 1;
            end
            
            % Проверка на тип property set
            
            if (Pset_Related_Checks == 1)
            
                if (~strcmp(PSETS{AT_PSETS(ELEMENTS{i}.Prop_ID)}.card, 'PROD'))

                    fprintf (1, '\nЭлемент %i типа %s ссылается на недопустимый property set %s с номером %i типа %s !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, PSETS{AT_PSETS(ELEMENTS{i}.Prop_ID)}.Patran_name, ELEMENTS{i}.Prop_ID, PSETS{AT_PSETS(ELEMENTS{i}.Prop_ID)}.card);
                    ErrCode = -1;
                    return;

                end
            
            end
            
            % Проверка на существование узла G1
            if (Node_Related_Checks == 1)
                if (ELEMENTS{i}.G1 > Max_Node_Number)
                    fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий узел %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.G1);
                    ErrCode = -1;
                    return;
                end
                if (AT_NODES(ELEMENTS{i}.G1) == 0)
                    fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий узел %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.G1);
                    ErrCode = -1;
                    return;
                end
            end
            
            % Проверка на существование узла G2
            if (Node_Related_Checks == 1)
                if (ELEMENTS{i}.G2 > Max_Node_Number)
                    fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий узел %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.G2);
                    ErrCode = -1;
                    return;
                end
                if (AT_NODES(ELEMENTS{i}.G2) == 0)
                    fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий узел %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.G2);
                    ErrCode = -1;
                    return;
                end
            end
            
            % Проверка на различие G1 и G2
            if (ELEMENTS{i}.G1 == ELEMENTS{i}.G2)
                fprintf (1, '\nОшибка: G1 = G2 в элементе %i типа %s !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                ErrCode = -1;
                return;
            end
            
        case 'CBAR'
            
            % Проверка на допустимость полей карточки
            
            if (isempty(ELEMENTS{i}.GA))
                fprintf (1, '\nПустая запись GA в карточке элемента с номером %i [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                ErrCode = -1;
                return;
            end
            
            if (isempty(ELEMENTS{i}.GB))
                fprintf (1, '\nПустая запись GB в карточке элемента с номером %i [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                ErrCode = -1;
                return;
            end
            
            if (isempty(ELEMENTS{i}.Prop_ID))
                fprintf (1, '\nПустая запись PID в карточке элемента с номером %i [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                fprintf (1, 'Задание полей PID с помощью карточки BAROR не поддерживается в текущей версии программы.\n');
                fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                return;
            end
            
            if (isempty(ELEMENTS{i}.G0) && isempty(ELEMENTS{i}.X1) && isempty(ELEMENTS{i}.X2) && isempty(ELEMENTS{i}.X3))
                fprintf (1, '\nПустые записи G0, X1, X2, X3 в карточке элемента с номером %i [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                fprintf (1, 'Задание полей G0, X1, X2, X3 с помощью карточки BAROR не поддерживается в текущей версии программы.\n');
                fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                return;
            end
            
            if ((~isempty(ELEMENTS{i}.G0)) && ((~isempty(ELEMENTS{i}.X2)) || (~isempty(ELEMENTS{i}.X3))))
                fprintf (1, '\nОшибка: непустая запись X2 или X3 при наличии записи G0 в карточке элемента с номером %i [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                ErrCode = -1;
                return;
            end
            
            if (isempty(ELEMENTS{i}.G0) && (isempty(ELEMENTS{i}.X1) || isempty(ELEMENTS{i}.X2) || isempty(ELEMENTS{i}.X3)))
                fprintf (1, '\nОбнаружены пустые компоненты вектора ориентации v в карточке с номером %i [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                return;
            end
            
            if (((~isempty(ELEMENTS{i}.W1A)) || (~isempty(ELEMENTS{i}.W2A)) || (~isempty(ELEMENTS{i}.W3A))) && (isempty(ELEMENTS{i}.W1A) || isempty(ELEMENTS{i}.W2A) || isempty(ELEMENTS{i}.W3A)))
                fprintf (1, '\nОбнаружены пустые компоненты вектора WA в карточке с номером %i [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                return;
            end
            
            if (((~isempty(ELEMENTS{i}.W1B)) || (~isempty(ELEMENTS{i}.W2B)) || (~isempty(ELEMENTS{i}.W3B))) && (isempty(ELEMENTS{i}.W1B) || isempty(ELEMENTS{i}.W2B) || isempty(ELEMENTS{i}.W3B)))
                fprintf (1, '\nОбнаружены пустые компоненты вектора WB в карточке с номером %i [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                return;
            end
            
            % Проверка на существование property set
            if (Pset_Related_Checks == 1)
                if (ELEMENTS{i}.Prop_ID > Max_Pset_Number)
                    fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий property set %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.Prop_ID);
                    ErrCode = -1;
                    return;
                end
                if (AT_PSETS(ELEMENTS{i}.Prop_ID) == 0)
                    fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий property set %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.Prop_ID);
                    ErrCode = -1;
                    return;
                end
                Prop_Usage_Table(ELEMENTS{i}.Prop_ID) = 1;
            end
            
            % Проверка на тип property set
            
            if (Pset_Related_Checks == 1)
            
                switch PSETS{AT_PSETS(ELEMENTS{i}.Prop_ID)}.card

                    case 'PBAR'

                        % Допустимый property set

                    case 'PBARL'

                        % Допустимый property set

                    case 'PBRSECT'

                        % Допустимый property set

                    otherwise

                        fprintf (1, '\nЭлемент %i типа %s ссылается на недопустимый property set %s с номером %i типа %s !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, PSETS{AT_PSETS(ELEMENTS{i}.Prop_ID)}.Patran_name, ELEMENTS{i}.Prop_ID, PSETS{AT_PSETS(ELEMENTS{i}.Prop_ID)}.card);
                        ErrCode = -1;
                        return;

                end
            
            end
            
            % Проверка на существование узла GA
            if (Node_Related_Checks == 1)
                if (ELEMENTS{i}.GA > Max_Node_Number)
                    fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий узел %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.GA);
                    ErrCode = -1;
                    return;
                end
                if (AT_NODES(ELEMENTS{i}.GA) == 0)
                    fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий узел %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.GA);
                    ErrCode = -1;
                    return;
                end
            end
            
            % Проверка на существование узла GB
            if (Node_Related_Checks == 1)
                if (ELEMENTS{i}.GB > Max_Node_Number)
                    fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий узел %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.GB);
                    ErrCode = -1;
                    return;
                end
                if (AT_NODES(ELEMENTS{i}.GB) == 0)
                    fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий узел %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.GB);
                    ErrCode = -1;
                    return;
                end
            end
            
            % Проверка на различие GA и GB
            if (ELEMENTS{i}.GA == ELEMENTS{i}.GB)
                fprintf (1, '\nОшибка: GA = GB в элементе %i типа %s !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                ErrCode = -1;
                return;
            end
            
            if (~isempty(ELEMENTS{i}.G0))
                
                % Проверка на существование узла G0
                if (Node_Related_Checks == 1)
                    if (ELEMENTS{i}.G0 > Max_Node_Number)
                        fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий узел G0 %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.G0);
                        ErrCode = -1;
                        return;
                    end
                    if (AT_NODES(ELEMENTS{i}.G0) == 0)
                        fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий узел G0 %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.G0);
                        ErrCode = -1;
                        return;
                    end
                end
            
                % Проверка на различие G0 и GA
                if (ELEMENTS{i}.G0 == ELEMENTS{i}.GA)
                    fprintf (1, '\nОшибка: G0 = GA в элементе %i типа %s !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                    ErrCode = -1;
                    return;
                end

                % Проверка на различие G0 и GB
                if (ELEMENTS{i}.G0 == ELEMENTS{i}.GB)
                    fprintf (1, '\nОшибка: G0 = GB в элементе %i типа %s !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                    ErrCode = -1;
                    return;
                end
            
            end
            
            % Проверка PA
            if (~isempty(ELEMENTS{i}.PA))
                if (length(str2double(ELEMENTS{i}.PA)) > 5)
                    fprintf (1, '\nОшибка: недопустимое число степеней свободы в поле PA в карточке элемента %i типа %s !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                    ErrCode = -1;
                    return;
                end
            end
            
            % Проверка PB
            if (~isempty(ELEMENTS{i}.PB))
                if (length(str2double(ELEMENTS{i}.PB)) > 5)
                    fprintf (1, '\nОшибка: недопустимое число степеней свободы в поле PB в карточке элемента %i типа %s !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                    ErrCode = -1;
                    return;
                end
            end
            
            % Проверка OFFT
            
            if (~isempty(ELEMENTS{i}.OFFT))
                if (length(ELEMENTS{i}.OFFT) ~= 3)
                    fprintf (1, '\nНедопустимая длина записи OFFT в карточке элемента %i типа %s !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                    fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    return;
                end
            end
            
            if (~isempty(ELEMENTS{i}.OFFT))
                
                if ((ELEMENTS{i}.OFFT(1) ~= 'G') && (ELEMENTS{i}.OFFT(1) ~= 'B'))
                    
                    fprintf (1, '\nОшибка: недопустимый символ [%s] в поле OFFT элемента %i [%s] !\n', ELEMENTS{i}.OFFT(1), ELEMENTS{i}.ID, ELEMENTS{i}.card);
                    ErrCode = -1;
                    return;

                end
                
                if ((ELEMENTS{i}.OFFT(2) ~= 'G') && (ELEMENTS{i}.OFFT(2) ~= 'O'))

                    fprintf (1, '\nОшибка: недопустимый символ [%s] в поле OFFT элемента %i [%s] !\n', ELEMENTS{i}.OFFT(2), ELEMENTS{i}.ID, ELEMENTS{i}.card);
                    ErrCode = -1;
                    return;

                end

                if ((ELEMENTS{i}.OFFT(3) ~= 'G') && (ELEMENTS{i}.OFFT(3) ~= 'O'))

                    fprintf (1, '\nОшибка: недопустимый символ [%s] в поле OFFT элемента %i [%s] !\n', ELEMENTS{i}.OFFT(3), ELEMENTS{i}.ID, ELEMENTS{i}.card);
                    ErrCode = -1;
                    return;

                end
                
            end
            
        case 'CBEAM'
            
            % Проверка на допустимость полей карточки
            
            if (~isempty(ELEMENTS{i}.BIT))
                fprintf (1, '\nОбнаружена запись BIT в карточке элемента с номером %i [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                fprintf (1, 'Карточки %s c полем BIT не поддерживаются в текущей версии программы.\n', ELEMENTS{i}.card);
                fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                return;
            end
            
            if (isempty(ELEMENTS{i}.GA))
                fprintf (1, '\nПустая запись GA в карточке элемента с номером %i [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                ErrCode = -1;
                return;
            end
            
            if (isempty(ELEMENTS{i}.GB))
                fprintf (1, '\nПустая запись GB в карточке элемента с номером %i [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                ErrCode = -1;
                return;
            end
            
            if (isempty(ELEMENTS{i}.Prop_ID))
                fprintf (1, '\nПустая запись PID в карточке элемента с номером %i [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                fprintf (1, 'Задание полей PID с помощью карточки BEAMOR не поддерживается в текущей версии программы.\n');
                fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                return;
            end
            
            if (isempty(ELEMENTS{i}.G0) && isempty(ELEMENTS{i}.X1) && isempty(ELEMENTS{i}.X2) && isempty(ELEMENTS{i}.X3))
                fprintf (1, '\nПустые записи G0, X1, X2, X3 в карточке элемента с номером %i [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                fprintf (1, 'Задание полей G0, X1, X2, X3 с помощью карточки BEAMOR не поддерживается в текущей версии программы.\n');
                fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                return;
            end
            
            if ((~isempty(ELEMENTS{i}.G0)) && ((~isempty(ELEMENTS{i}.X2)) || (~isempty(ELEMENTS{i}.X3))))
                fprintf (1, '\nОшибка: непустая запись X2 или X3 при наличии записи G0 в карточке элемента с номером %i [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                ErrCode = -1;
                return;
            end
            
            if (isempty(ELEMENTS{i}.G0) && (isempty(ELEMENTS{i}.X1) || isempty(ELEMENTS{i}.X2) || isempty(ELEMENTS{i}.X3)))
                fprintf (1, '\nОбнаружены пустые компоненты вектора ориентации v в карточке с номером %i [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                return;
            end
            
            if (((~isempty(ELEMENTS{i}.W1A)) || (~isempty(ELEMENTS{i}.W2A)) || (~isempty(ELEMENTS{i}.W3A))) && (isempty(ELEMENTS{i}.W1A) || isempty(ELEMENTS{i}.W2A) || isempty(ELEMENTS{i}.W3A)))
                fprintf (1, '\nОбнаружены пустые компоненты вектора WA в карточке с номером %i [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                return;
            end
            
            if (((~isempty(ELEMENTS{i}.W1B)) || (~isempty(ELEMENTS{i}.W2B)) || (~isempty(ELEMENTS{i}.W3B))) && (isempty(ELEMENTS{i}.W1B) || isempty(ELEMENTS{i}.W2B) || isempty(ELEMENTS{i}.W3B)))
                fprintf (1, '\nОбнаружены пустые компоненты вектора WB в карточке с номером %i [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                return;
            end
            
            % Проверка на существование property set
            if (Pset_Related_Checks == 1)
                if (ELEMENTS{i}.Prop_ID > Max_Pset_Number)
                    fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий property set %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.Prop_ID);
                    ErrCode = -1;
                    return;
                end
                if (AT_PSETS(ELEMENTS{i}.Prop_ID) == 0)
                    fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий property set %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.Prop_ID);
                    ErrCode = -1;
                    return;
                end
                Prop_Usage_Table(ELEMENTS{i}.Prop_ID) = 1;
            end
            
            % Проверка на тип property set
            
            if (Pset_Related_Checks == 1)
            
                switch PSETS{AT_PSETS(ELEMENTS{i}.Prop_ID)}.card

                    case 'PBEAM'

                        % Допустимый property set

                    case 'PBEAML'

                        % Допустимый property set

                    case 'PBCOMP'

                        % Допустимый property set

                    case 'PBMSECT'

                        % Допустимый property set

                    otherwise

                        fprintf (1, '\nЭлемент %i типа %s ссылается на недопустимый property set %s с номером %i типа %s !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, PSETS{AT_PSETS(ELEMENTS{i}.Prop_ID)}.Patran_name, ELEMENTS{i}.Prop_ID, PSETS{AT_PSETS(ELEMENTS{i}.Prop_ID)}.card);
                        ErrCode = -1;
                        return;

                end
            
            end
            
            % Проверка на существование узла GA
            if (Node_Related_Checks == 1)
                if (ELEMENTS{i}.GA > Max_Node_Number)
                    fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий узел %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.GA);
                    ErrCode = -1;
                    return;
                end
                if (AT_NODES(ELEMENTS{i}.GA) == 0)
                    fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий узел %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.GA);
                    ErrCode = -1;
                    return;
                end
            end
            
            % Проверка на существование узла GB
            if (Node_Related_Checks == 1)
                if (ELEMENTS{i}.GB > Max_Node_Number)
                    fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий узел %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.GB);
                    ErrCode = -1;
                    return;
                end
                if (AT_NODES(ELEMENTS{i}.GB) == 0)
                    fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий узел %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.GB);
                    ErrCode = -1;
                    return;
                end
            end
            
            % Проверка на различие GA и GB
            if (ELEMENTS{i}.GA == ELEMENTS{i}.GB)
                fprintf (1, '\nОшибка: GA = GB в элементе %i типа %s !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                ErrCode = -1;
                return;
            end
            
            if (~isempty(ELEMENTS{i}.G0))
                
                % Проверка на существование узла G0
                if (Node_Related_Checks == 1)
                    if (ELEMENTS{i}.G0 > Max_Node_Number)
                        fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий узел G0 %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.G0);
                        ErrCode = -1;
                        return;
                    end
                    if (AT_NODES(ELEMENTS{i}.G0) == 0)
                        fprintf (1, '\nЭлемент %i типа %s ссылается на несуществующий узел G0 %i !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card, ELEMENTS{i}.G0);
                        ErrCode = -1;
                        return;
                    end
                end
            
                % Проверка на различие G0 и GA
                if (ELEMENTS{i}.G0 == ELEMENTS{i}.GA)
                    fprintf (1, '\nОшибка: G0 = GA в элементе %i типа %s !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                    ErrCode = -1;
                    return;
                end

                % Проверка на различие G0 и GB
                if (ELEMENTS{i}.G0 == ELEMENTS{i}.GB)
                    fprintf (1, '\nОшибка: G0 = GB в элементе %i типа %s !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                    ErrCode = -1;
                    return;
                end
            
            end
            
            % Проверка PA
            if (~isempty(ELEMENTS{i}.PA))
                if (length(str2double(ELEMENTS{i}.PA)) > 5)
                    fprintf (1, '\nОшибка: недопустимое число степеней свободы в поле PA в карточке элемента %i типа %s !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                    ErrCode = -1;
                    return;
                end
            end
            
            % Проверка PB
            if (~isempty(ELEMENTS{i}.PB))
                if (length(str2double(ELEMENTS{i}.PB)) > 5)
                    fprintf (1, '\nОшибка: недопустимое число степеней свободы в поле PB в карточке элемента %i типа %s !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                    ErrCode = -1;
                    return;
                end
            end
            
            % Проверка OFFT
            
            if (~isempty(ELEMENTS{i}.OFFT))
                if (length(ELEMENTS{i}.OFFT) ~= 3)
                    fprintf (1, '\nНедопустимая длина записи OFFT в карточке элемента %i типа %s !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
                    fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    return;
                end
            end
            
            if (~isempty(ELEMENTS{i}.OFFT))
                
                if ((ELEMENTS{i}.OFFT(1) ~= 'G') && (ELEMENTS{i}.OFFT(1) ~= 'B'))
                    
                    fprintf (1, '\nОшибка: недопустимый символ [%s] в поле OFFT элемента %i [%s] !\n', ELEMENTS{i}.OFFT(1), ELEMENTS{i}.ID, ELEMENTS{i}.card);
                    ErrCode = -1;
                    return;

                end
                
                if ((ELEMENTS{i}.OFFT(2) ~= 'G') && (ELEMENTS{i}.OFFT(2) ~= 'O'))

                    fprintf (1, '\nОшибка: недопустимый символ [%s] в поле OFFT элемента %i [%s] !\n', ELEMENTS{i}.OFFT(2), ELEMENTS{i}.ID, ELEMENTS{i}.card);
                    ErrCode = -1;
                    return;

                end

                if ((ELEMENTS{i}.OFFT(3) ~= 'G') && (ELEMENTS{i}.OFFT(3) ~= 'O'))

                    fprintf (1, '\nОшибка: недопустимый символ [%s] в поле OFFT элемента %i [%s] !\n', ELEMENTS{i}.OFFT(3), ELEMENTS{i}.ID, ELEMENTS{i}.card);
                    ErrCode = -1;
                    return;

                end
                
            end

        otherwise
            
            fprintf (1, '\nНеизвестная карточка элемента %i [%s] !\n', ELEMENTS{i}.ID, ELEMENTS{i}.card);
            ErrCode = -1;
            return;
        
    end
    
    if (size(ELEMENTS,1) > Progress_Bar_Elm_Threshold)
    
        % Для вывода прогресса
        Counter = Counter + 1;
        Counter_2 = Counter_2 + 1;
        if (Counter_2 == N_rec_segm)
            Counter_2 = 0;
            Written_count = Written_count + 1;
            if (Written_count < Time_segments)
                fprintf (1, '#');
                pause (Progress_Bar_Delay);
            end
        end
    
    end
    
    
end

% Проверка на использование всех property set
if (Pset_Related_Checks == 1)
    if (~isempty(AT_PSETS))
        for i=1:size(AT_PSETS,1)

            if ((AT_PSETS(i) ~= 0) && (Prop_Usage_Table(i) == 0))
                fprintf (1, '\nОшибка: элементы ссылаются не на все имеющиеся в базе property set !\n');
                fprintf (1, 'Прочитанные из bdf файла property set, на которые не ссылается ни один элемент, не поддерживаются в текущей версии программы.\n');
                fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                return;
            end

        end
    end
end

if (size(ELEMENTS,1) > Progress_Bar_Elm_Threshold)

    % Для вывода прогресса
    if (N_rec_segm == 0)
        for i=1:Time_segments-1
            fprintf (1, '#');
            pause (Progress_Bar_Delay);
        end
    end
    fprintf (1, '# ');
    pause (Progress_Bar_Delay);

end

fprintf (1, 'OK!\n');
